package com.atbeijing.bigdata.spark.core.rdd.operator.transform

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

object Spark06_Oper_Transform_1 {

    def main(args: Array[String]): Unit = {

        val conf = new SparkConf().setMaster("local[*]").setAppName("TransformOperator")
        conf.set("spark.local.dir", "e:/test")
        val sc = new SparkContext(conf)

        // TODO 算子 - 转换 - groupBy
        val rdd = sc.makeRDD(
            List("Hello", "Hadoop", "Hpark", "Hive", "Hcala", "Hqoop"),
            3
        )

        // Hello => H
        // Hadoop => H
        // Spark => s
        // Hive => H
        // Scala => S
        // Sqoop => S
        // TODO 1. 一个组的数据只能一个分区中
        // TODO 2. 分组后可能会导致不同分区的数据不均衡
        // TODO 3. 默认情况下，分组前和分组后的分区数量不变的

        // TODO 4. 所有的shuffle操作都有改变分区的能力
        // TODO 5. 如果一个算子能改变分区，90%是有shuffle的
        val rdd2 = rdd.groupBy(_.substring(0,1), 2)
        rdd2.collect.foreach(println)

       // rdd.map((_,1)).reduceByKey(_+_)




        sc.stop()

    }
}
